在本节中,我们将使用 MindOpt C# API,以按行输入的形式来建模以及求解 混合整数线性规划问题示例 中的问题。
首先,创建优化模型:
31// Create model32MDOEnv env = new MDOEnv(); 33MDOModel model = new MDOModel(env); 34model.Set(MDO.StringAttr.ModelName, "MILP_01");接下来,我们通过 MDOModel.Set 将目标函数设置为 最小化,并调用 MDOModel.AddVar 来添加四个优化变量,定义其下界、上界、名称和类型(有关 MDOModel.Set 和 MDOModel.AddVar 的详细使用方式,请参考 C# API):
38// Change to minimization problem.39model.Set(MDO.IntAttr.ModelSense, MDO.MINIMIZE);4041// Add variables.42MDOVar[] x = new MDOVar[4];43x[0] = model.AddVar(0.0, 10.0, 1.0, 'I', "x0");44x[1] = model.AddVar(0.0, MDO.INFINITY, 2.0, 'I', "x1");45x[2] = model.AddVar(0.0, MDO.INFINITY, 1.0, 'I', "x2");46x[3] = model.AddVar(0.0, MDO.INFINITY, 1.0, 'C', "x3");接着,我们开始添加线性约束:
48// Add constraints.49double[][] consV = new double[][]{50new double[] { 1.0, 1.0, 2.0, 3.0},51new double[] { 1.0, 0, -1.0, 6.0} 52};5354MDOLinExpr tempLinExpr1 = new MDOLinExpr();55tempLinExpr1.AddTerms(consV[0], x);56model.AddConstr(tempLinExpr1, MDO.GREATER_EQUAL, 1.0, "c0");5758MDOLinExpr tempLinExpr2 = new MDOLinExpr();59tempLinExpr2.AddTerms(consV[1], x);60model.AddConstr(tempLinExpr2, MDO.EQUAL, 1.0, "c1");问题输入完成后,再调用 MDOModel.Optimize 求解优化问题:
63model.Optimize();求解完成后,用 MDOModel.Get 和模型属性值 ObjVal 来查看优化结果和最优目标值,以及 MDOVar.Get 和变量属性值 X 来查看优化解的目标值。 其他的属性值请查看 属性 章节。
65if (model.Get(MDO.IntAttr.Status) == MDO.Status.OPTIMAL)66{67Console.WriteLine($"Optimal objective value is: {model.Get(MDO.DoubleAttr.ObjVal)}");68Console.WriteLine("Decision variables: ");69for(int i = 0; i = 112 *c1 : 1 x0 - 1 x2 + 6 x3 = 113 * Bounds14 *0